package com.ungs.dao.impl;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import com.ungs.dao.VarianteDAO;
import com.ungs.entities.Variante;

public class VarianteDAOImpl extends EntidadDAOImpl<Variante> implements
		VarianteDAO {

	@SuppressWarnings("unchecked")
	@Override
	public List<Variante> getVarianteByFilter(String param, boolean todos)
			throws HibernateException {
		List<Variante> varianteList = new ArrayList<Variante>();

		logger.info("Obteniendo variantes por filtro");
		try {
			iniciaConexion();
			Criteria criteria = getSession().createCriteria(Variante.class);
			criteria.add(Restrictions.like("descripcion", param + "%"));

			if (!todos) {
				criteria.add(Restrictions.eq("estadoLogico", "A"));
			}

			varianteList = criteria.list();

		} catch (HibernateException he) {
			logger.error("Error al traer el filtro de variantes: "
					+ Variante.class + "DAO");
			manejaExcepcion(he);
			throw he;
		} finally {
			getSession().close();
		}

		return varianteList;
	}

	@SuppressWarnings("unchecked")
	@Override
	public Variante getUltimoVariante() throws HibernateException {
		Variante variante = null;
		List<Variante> varianteList = new ArrayList<Variante>();

		logger.info("Obteniendo el ultimo proceso");
		try {
			iniciaConexion();
			Criteria criteria = getSession().createCriteria(Variante.class);
			criteria.setMaxResults(1);
			criteria.addOrder(Order.desc("id"));

			varianteList = (List<Variante>) criteria.list();

			if (varianteList.size() > 0)
				variante = varianteList.get(0);

		} catch (HibernateException he) {
			logger.error("Error al traer el ultimo variante: " + Variante.class
					+ "DAO");
			manejaExcepcion(he);
			throw he;
		} finally {
			getSession().close();
		}

		return variante;
	}

}
